<?php

1->CAS (Compare And Sweep)
   Java提供的解决 '高并发' 情景下的 '线程安全问题'.


2
->CAS : Central Authentication Service (单点登录的理论)
->SSO : Single Sign On (单点登录)
登录:
A系统(邮箱)
B系统(账号)
C系统(手机号)
...
会记混 >_<.......


3->SOA : Service-Oriented Architecture (面向服务)


4->OSS : Object Storage Service (对象存储服务器 - 阿里云)


5->JWT : JSON Web Token (跨域身份验证解决方案)
         jwt是信息加密的一种方式，一个JWT由三个部分组成：header，payload，signature。分别保存了不同的信息。三个部分在JWT中分别对应英文句号分割出来的三个串：


6->SQL : Structured Query Language (结构化查询语言)


7->高并发 HC (High Concurrency): 通过设计保证系统能够同时【并行】处理很多请求.
->响应时间 : 系统对请求做出响应的时间。例如系统处理一个HTTP请求需要200ms，这个200ms就是系统的响应时间。
->吞吐量 : 单位时间内处理的请求数量。
->QPS : 每秒响应请求数。在互联网领域，这个指标和吞吐量区分的没有这么明显。
                    QPS（TPS）= 并发数 / 平均响应时间
->并发用户数 : 同时承载正常使用系统功能的用户数量。例如一个即时通讯系统，同时在线量一定程度上代表了系统的并发用户数。
->QPS（TPS）：每秒钟request/事务 数量
并发数： 系统同时处理的request/事务数
响应时间：  一般取平均响应时间


8->高可用 HA (High Availability) : 它通常是指，通过设计减少系统不能提供服务的时间.
'一般是用集群的解决方案!'


9->集群 : 多个人在一起做 '一样' 的工作.
'主从节点'!
每台服务器 上 每个节点 存储的数据都 '完全一致!'. 这样在 '某台失效' 时, 别的服务器也保存对应的数据!
(用户在 'A' 登录之后保存 'session', A挂掉之后, 也要保证别的服务器也都 '有数据'!).
所以面试时可能会问到, 解决方案: 将数据存储在 'Redis' 里.


10->分布式 : 多个人 '分工各自不同'.


11->Redis集群 : 实现在大量数据缓存情况下的可用. (主从节点)


12->Nginx集群 : 处理大量 'HTTP' 请求. (主从节点)


13->MySQL读写分离____MySQL—Proxy____中间件 : 作用是: 处理发送过来的到底是 '读 - 从库', 还是 '写 - 主库'.
在实现 '读写分离' 之后的流程:
->MyCat
|->'从 - slave' --->读数据
'主 - master' --->写数据 --->复制 --->分发 -------
|->'从 - slave' --->读数据


14->RPC : 远程过程调用.


15->Ant : Ant是Java的生成工具，是Apache的核心项目；
->Maven的前身!!!
Ant类似于Unix中的Make工具，都是用来编译、生成；

Ant是跨平台的，而Make不能；

Ant的主要目的就是把你想做的事情自动化，不用你手动一步一步做，因为里面内置了javac、java、创建目录、复制文件等功能，
所以可以直接点击Ant文件，即可编译生成你的项目。


16->Code_Review : 代码审评.


17->Mock : 生成 '真实' 的测试数据.
->EasyMock
->Jmockit


18->命令式编程 : 指令清晰, 面面俱到, 什么时间做什么事情, 怎么做, 描述的非常详细!
->过程导向(


19->声明式编程 : 不会说具体怎么做 - How, 只会描述要做的事 - What, 剩下的具体步骤由编程人员去完成!
->结果导向( SQL语句...


20->TDD : (Test Division Duplexing - '测试驱动开发')
是敏捷开发中的一项核心实践和技术，也是一种设计方法论。TDD的原理是在开发功能代码之前，先编写单元测试用例代码，测试代码确定需要编写什么产品代码。
TDD虽是敏捷方法的核心实践，但不只适用于XP（Extreme Programming），同样可以适用于其他开发方法和过程。


21->敏捷开发 : 是以用户的'需求进化'为核心, 采用迭代, 循序渐进的方向进行软件开发.
在敏捷开发中, 软件项目在构建初期被切分成多个子项目, 各个子项目的成果都经过测试, 具备: '可视', '可集成'和'可使用'的特征.
换言之, 就是把一个大项目分成'多个互相联系', 但也可以'独立运行'的小项目, 并分别完成, 在此过程中软件一直处于'可使用'状态.


22->QA : 质量保证 (Quality Assurance).
为了提供足够的信任表明实体能够满足质量要求, 而在质量管理体系中实施并根据需要进行证实的全部'有计划'和'有系统'的活动.


23->持续集成 : CI (Continuous Integration)
持续集成(CI) : 是在源代码变更后自动检测、拉取、构建和（在大多数情况下）进行单元测试的过程。持续集成是启动管道的环节
（尽管某些预验证 —— 通常称为 上线前检查(pre-flight checks) —— 有时会被归在持续集成之前）。

'持续' : 用于描述遵循我在此提到的许多不同流程实践。这并不意味着'一直在运行', 而是'随时可运行'.

'基本思想' : 是让一个自动化过程监测一个或多个源代码仓库是否有变更。当变更被推送到仓库时，它会监测到更改、下载副本、构建并运行任何相关的单元测试。


23.1->持续集成 : CD (Continuous D)



24->分布式系统 : (distributed system)
是建立在网络之上的软件系统。正是因为软件的特性，所以分布式系统具有高度的内聚性和透明性。
因此，网络和分布式系统之间的区别更多的在于高层软件（特别是操作系统），而不是硬件。


25->分布式软件系统 : (Distributed Software Systems)
是支持分布式处理的软件系统,是在由通信网络互联的多处理机体系结构上执行任务的系统。它包括分布式操作系统、
分布式程序设计语言及其编译(解释)系统、分布式文件系统和分布式数据库系统等。


26->PO : ('持久对象' - Persistant Object)
可以看成是与 '数据库中的表相映射的java对象'。最简单的PO就是对应数据库中某个表中的一条记录，多个记录可以用PO的集合。
PO中'应该不包含任何对数据库的操作'.


27->VO : ('值对象' - Value Object)
通常用于 '业务层之间的数据传递', 和PO一样也是'仅仅包含数据而已'。但应是抽象出的业务对象, 可以和表对应, 也可以不, 这根据业务的需要.
个人觉得同DTO(数据传输对象),在web上传递.


28->DAO : ('数据访问对象' - Date Access Object)
此对象用于'访问数据库'。通常和PO结合使用, DAO中包含了各种数据库的操作方法。通过它的方法, 结合PO对数据库进行相关的操作.


29->BO : ('业务对象' - Business Object)
'封装业务逻辑的java对象', 通过调用DAO方法, 结合PO, VO进行业务操作.


30->POJO : (Plain Ordinary Java Object)


31->DTO : ('数据传输对象' - Data Transfer Object)
以前被称为值对象(VO,value object)，作用仅在于在应用程序的各个子系统间传输数据，在表现层展示。
与POJO对应一个数据库实体不同，DTO并不对应一个实体，'可能仅存储实体的部分属性或加入符合传输需求的其他的属性'。
('随意组合所要传输的属性字段!', 前提是: 这些字段'都能用到!')

'1 - 由来'
当有客户端要向服务器端传输大量数据的时候，可以通过一个包含要传输的所有数据的方法调用来完成。这在小数据量的时候缺点并不明显，
但是如果要传递包含有大量信息的数据的时候，这将变得难以忍受!
//我们需要使用这个方法传递很多数据，并且如果数据方式变化，这个方法就要发生变化。
public void save(String id,String number,String name,int type,int height,int width,BigDecimal weight,BigDecimal price,String description)

'2 - 说明'
系统需要一种在客户端和服务器端之间高效、安全地进 行数据传输的技术。DTO(Data Transfer Object，数据传送对象)是解决这个问题的比较好的方式。
DTO是一个普通的Java类，它封装了要传送的批量的数据。当客户端需要读取服务器端的数据的时候，服务器端将数据封装在DTO中，
这样客户端就可以在'一个网络调用中获得它需要的所有数据!!!'。

'3 - 举例'
ISomeInterface intf = RemoteService.getSomeInterface();
SomeDTOInfo info = intf.getSomeData(id); //我们一次性得到所需要的全部数据，然后在本地去拆分。
System.out.println("您要查询的商品的资料为:");
System.out.println("编号："+info.getNumber());
System.out.println("姓名："+info.getName());
System.out.println("类型："+info.getType());
System.out.println("高度："+info.getHeight());
System.out.println("宽度："+info.getWidth());
System.out.println("价格："+info.getPrice());

'4 - 好处'
1. 域模型结构可以在一次网络调用中复制到客户端, 客户端可以读取、更新这个DTO而不需要额外的网络调用开销，
而且客户端还可以通过将更新后的DTO回传到服务器端以更新数据;

2. 易于实现快速开发。通过使用域DTO可以直接将域模型在层间传输,
减少了工作量, 可以快速地构建出一个应用。


32->PO、BO、VO、DTO、POJO、DAO的区别
|->PO(基础) : 最形象的理解就是'一个PO就是数据库中的一条记录'。
| 好处是可以把一条记录作为一个对象处理，可以方便的转为其它对象。
|
|->BO : 主要作用是把业务逻辑封装为一个对象。这个对象可以包括一个或多个其它的对象。
| 比如一个简历，有教育经历、工作经历、社会 关系等等。
| 我们可以把教育经历对应一个PO，工作经历对应一个PO，社会 关系对应一个PO。
| 建立一个对应简历的BO对象处理简历，'每个BO包含这些PO'。
| 这样处理业务逻辑时，我们就可以针对BO去处理。
|
|->VO : ViewObject表现层对象.
| '要对应界面显示的数据对象'。对于一个WEB页面，或者SWT、SWING的一个界面，用'一个VO对象对应整个界面的值'。
|
|->DTO : 主要用于远程调用等需要大量传输对象的地方。
| 比如我们一张表有100个字段，那么对应的PO就有100个属性, 但是我们界面上只要显示10个字段，
| 客户端用WEB service来获取数据，没有必要把整个PO对象传递到客户端，这时我们就可以用只有这10个属性的DTO来传递结果到客户端，
| 这样也不会暴露服务端表结构.'到达客户端以后'，如果用这个对象来对应界面显示，那此时'它的身份就转为VO'.
|
|->DAO : 这个最熟悉，和上面几个O区别最大，基本没有互相转化的可能性和必要。
| 主要用来封装对数据库的访问。通过它可以把'POJO持久化为PO'，用PO组装出来VO、DTO
|
|->POJO : 个人感觉POJO是最常见最多变的对象，是一个中间对象，也是我们最常打交道的对象.
持久化后 ---> PO
直接传递 ---> DTO
直接对应表示层 ---> VO



33->OOA
Object-Oriented Analysis : 面向对象分析方法.



34->VPN
1->VPN是什么?
Viritual Private Network
'解释1: '
简单地说，VPN创建了一个安全的、加密的连接(可以认为是一个隧道)，连接在您的计算机和由VPN服务操作的服务器之间。
在专业环境下，这条通道有效地让你成为公司网络的一部分，就好像你坐在办公室里一样。

'解释2: '
当您连接到VPN时，所有的网络流量都要经过这个受保护的通道，没有人——甚至连您的isp——能够看到您的流量，直到它从VPN服务器退出隧道并进入公共internet。
如果您确保只连接到使用HTTPS保护的网站，那么即使您的数据离开VPN之后，您的数据也将继续加密。

'解释3: '
这样想:如果你的车驶出车道，有人会跟着你，看你要去哪里，你在目的地停留了多长时间，以及你什么时候回来。他们甚至可以偷窥你的车，了解你更多的信息。
通过VPN服务，你基本上是开车进入一个封闭的停车场，换到另一辆车，然后开车出去，这样没有人知道你去了哪里。

2->解决了什么问题?
这种对个人数据安全和隐私的态度代表了一个巨大的网络安全问题。公共Wi-Fi网络，这是公开的和方便的，不幸的是，也非常方便的攻击者寻求损害你的个人信息。
例如，你怎么知道“starbucks_wifi_real”实际上是咖啡店的Wi-Fi网络?任何人都可以创建这个网络，他们这样做可能是为了引诱受害者通过它披露个人信息。
事实上，一个流行的安全研究员恶作剧是创建一个与免费的流行服务同名的网络，看看有多少设备会自动连接，因为它看起来很安全.

3->好处
1. 首先，使用VPN可以防止同一网络接入点(或其他任何地方)上的任何人在中间人攻击中拦截您的web流量。

2. VPN还会隐藏计算机的实际IP地址，将其隐藏在连接的VPN服务器的IP地址后面。
IP地址是基于位置分布的，因此您可以通过查看某人的IP地址来估计他的位置。虽然IP地址可能会改变，但通过观察相同IP地址出现的位置,
可以在互联网上跟踪某人。使用VPN会让广告商(或间谍或黑客)更难在线追踪你。

3. '补充'
许多VPN服务也提供自己的DNS解析系统。可以将DNS看作是一本电话簿，它将像“pcmag.com”这样基于文本的URL转换为计算机可以理解的数字IP地址。
精明的窥探者可以监视DNS请求并在线跟踪您的移动。贪婪的攻击者还可以使用DNS中毒将你引向伪造的钓鱼网页，以窃取你的数据。
当您使用VPN的DNS系统时，它是另一层保护。

4->VPN的选择
过去几年，VPN服务市场爆炸式增长，一场小小的竞争已演变成一场全面混战。许多供应商利用了公众对监控和网络犯罪日益增长的担忧，
这意味着很难判断一家公司何时提供了安全服务，何时在销售“蛇油”时抛出了大量花言巧语。事实上，在国会取消了ISP隐私规定后，VPN服务变得如此流行,
甚至出现了假冒的VPN，所以要小心。在评估哪种VPN服务适合您时，一定要记住以下几点:
声誉、性能、使用的加密类型、透明性、易用性、支持和额外特性。不要只关注价格或速度，尽管这些都是重要的因素。

5->连接
VPN连接的数量是在'/conf'文件夹下的数量, 如果想要切换的话, 就需要在'/conf'文件夹里面配置.
'/conf'文件夹里面的一个'配置文件', 相当于一个'服务器'.

6->模型
F : 服务器.
|--->电脑1
F1 ---| |---> 分部一 --|
F2 | _______ ______ | |--->电脑2
F3 |----> | 路由 | ---> | VPN | ---->|---> 分部二...
F4 | ------- ------ |
F5 ---| |---> 分部三...



35->堡垒机
堡垒机，即在一个特定的网络环境下，为了保障网络和数据不受来自外部和内部用户的入侵和破坏，
而运用各种技术手段实时收集和监控网络环境中每一个组成部分的系统状态、安全事件、网络活动，以便集中报警、及时处理及审计定责。



36->JPA(Java Persistence API)
Jpa (Java Persistence API) 是 Sun 官方提出的 Java 持久化规范，它为 Java 开发人员提供了一种对象/关联映射工具来管理 Java 应用中的关系数据。
它的出现主要是为了简化现有的持久化开发工作和整合 ORM 技术
Jpa 是一套规范，不是一套产品
如果说这些产品实现了这个 Jpa 规范，那么我们就可以叫他们为 Jpa 的实现产品。



37->ELK(Elasticsearch + Logstash + Kibana)
elasticsearch : 后台分布式存储以及全文检索.
logstash : 日志加工、“搬运工”.
kibana : 数据可视化展示.
ELK架构为数据分布式存储、可视化查询和日志解析创建了一个功能强大的管理链。 三者相互配合，取长补短，共同完成分布式大数据处理工作。



38->中台
中台不同于[前台/后台], 其实说白了是前后台根据业务下沉之后进行[抽取]后的一系列可复用的模块.
又可划分4个维度:
->业务中台: 业务中台在前文中反复提及，就是把各个项目的共通业务进行下沉，整合成通用的服务平台.
->技术中台: 为了避免研发人员重复发明轮子，向各个项目提供通用的底层框架、引擎、中间件.
->数据中台: 为各个项目进行各种数据采集和分析.
->算法中台: 为各个项目提供算法能力，比如推荐算法、搜索算法、图像识别、语音识别等等.

使用场景 :
当企业有了一定规模，产品得到了市场的认可，这时候公司的首要目的不再是活下去，而是活的更好。
这个时候，趁着项目复杂度还不是特别高，可以考虑把各项目的通用部分下沉，组建中台，以方便后续新项目的尝试和旧项目的迭代。


39->SAP(System application and products in data processing)
又称企业管理解决方案，其功能为：借助软件程序为企业定制并创建管理系统，
对企业的人力资源，物流运输，销售服务，交易支付，产品规格及质量，生产活动，原材料采购，货物仓储及库存管理等全部经营活动与环节，实施监督，分析及管理
形成数据化的资源管理系统，为企业生产，决策，组织运营提供指导及依据，有利于企业财务管理质量的提升，有利于企业资金的合理分配。


40->DNS( Domain Name System )
是“域名系统”的英文缩写，是一种组织成域层次结构的计算机和网络服务命名系统，它用于TCP/IP网络，它所提供的服务是用来将主机名和域名转换为IP地址的工作。俗话说，DNS就是将网址转化为对外的IP地址。

dns从用户访问到响应的整个流程:
* 第一步：浏览器将会检查缓存中有没有这个域名对应的解析过的IP地址，如果有该解析过程将会结束。浏览器缓存域名也是有限制的，包括缓存的时间、大小，可以通过TTL属性来设置。
* 第二步：如果用户的浏览器中缓存中没有，操作系统会先检查自己本地的hosts文件是否有这个网址映射关系，如果有，就先调用这个IP地址映射，完成域名解析。
* 第三步：如果hosts里没有这个域名的映射，则查找本地DNS解析器缓存，是否有这个网址映射关系，如果有，直接返回，完成域名解析。
* 第四步：如果hosts与本地DNS解析器缓存都没有相应的网址映射关系，首先会找TCP/ip参数中设置的首选DNS服务器，在此我们叫它本地DNS服务器，此服务器收到查询时，如果要查询的域名，包含在本地配置区域资源中，则返回解析结果给客户机，完成域名解析，此解析具有权威性。
* 第五步：如果要查询的域名，不由本地DNS服务器区域解析，但该服务器已缓存了此网址映射关系，则调用这个IP地址映射，完成域名解析，此解析不具有权威性。
* 第六步：如果本地DNS服务器本地区域文件与缓存解析都失效，则根据本地DNS服务器的设置（是否设置转发器）进行查询，如果未用转发模式，本地DNS就把请求发至13台根DNS，根DNS服务器收到请求后会判断这个域名(.com)是谁来授权管理，并会返回一个负责该顶级域名服务器的一个IP。本地DNS服务器收到IP信息后，将会联系负责.com域的这台服务器。这台负责.com域的服务器收到请求后，如果自己无法解析，它就会找一个管理.com域的下一级DNS服务器地址给本地DNS服务器。当本地DNS服务器收到这个地址后，就会找域名域服务器，重复上面的动作，进行查询，直至找到域名对应的主机。
* 第七步：如果用的是转发模式，此DNS服务器就会把请求转发至上一级DNS服务器，由上一级服务器进行解析，上一级服务器如果不能解析，或找根DNS或把转请求转至上上级，以此循环。不管是本地DNS服务器用是是转发，还是根提示，最后都是把结果返回给本地DNS服务器，由此DNS服务器再返回给客户机。


41->P2P（ Peer To Peer lending ）
意即个人对个人（伙伴对伙伴）。又称点对点网络借款，是一种将小额资金聚集起来借贷给有资金需求人群的一种民间小额借贷模式。属于互联网金融（ITFIN）产品的一种。属于民间小额借贷，借助互联网、移动互联网技术的网络信贷平台及相关理财行为、金融服务。


42->P2C
personal（个人）to company（公司）或者platform（平台）to CreditAssignment（债权转让），或者production（商品） to consumer（顾客）产品从生产企业直接送到消费者手中，是继P2P之后的又一个互联网金融概念，在国内叫做:生活服务平台。


43->B端和C端
C全称是Customer即消费者（多为用户）的产品，个人用户或终端用户，使用的是客户端。例如：微信、抖音、微博、网易严选、拼多多等等。
B全称是Business即商家（多为企业）的产品，通常是企业或商家，为工作或商业目的而使用的系统型软件、工具或平台。例如：腾讯云、阿里云、AWS或企业内部的ERP系统等等


44->并发和并行
并发(concurrency):
是指在同一时刻只能有一条指令执行，但多个进程指令被【快速的轮换执行 - CUP时间钟快速切换】，
使得在【宏观】上具有多个进程同时执行的结果(切换足够快，看起来像是同时执行的)，但是在【微观】上并不是同时执行的，只是把时间分成若干段，使多个进程快速交替的进行。

并行(parallelism): 指在同一时刻，有多条指令在多个处理器上同时执行。所以无论从微观还是宏观来看，二者都是一起执行的。



45->异构
    是指项目使用的技术不唯一, 比如: 一部分用php, 一部分用java, 框架不统一, 技术栈不统一.


46->JNDI (Java Naming and Directory Interface)
    是指项目使用的技术不唯一, 比如: 一部分用php, 一部分用java, 框架不统一, 技术栈不统一.


47->OSI (Open System Interconnect)
    意思为开放网络互联，是由国际标准化组织(ISO)和国际电报电话咨询委员会(CCITT)共同出版的, 他是一种网络互联模型，也是一种规范。


48->POC
    快速的概念验证阶段.
